In Elixir, il calcolo è visto come una serie di trasformazioni fondamentali. I dati sono immutabili e l'operatore = non serve per l'assegnazione, ma per corrispondenza di modelli.
1. L'operatore di corrispondenza
La corrispondenza ti permette di associare valori a modelli. Se la struttura del lato sinistro non corrisponde a quello destro, la trasformazione fallisce. Elixir utilizza operatori specializzati per il flusso di dati: Aritmetica (+, -, *, /), Confronto (===, !==, >=), e Unione (<> per le stringhe, ++ per le liste).
2. L'espressione 'with'
L'espressione with orchestra trasformazioni a più passi in cui il successo è condizionato. Permette di concatenare corrispondenze usando <-. A differenza dell'operatore di corrispondenza =, se una corrispondenza in <- fallisce, l'espressione restituisce il valore non corrispondente invece di sollevare un errore.
3. Ambito e sintassi
Sotto la superficie, with è trattato come un macro o chiamata di funzione. Le variabili definite al suo interno non si diffondono nell'ambito esterno. La sintassi come media = with cont = ..., do: somma/cont è il modo basato su espressioni per calcolare valori derivati.
$$\text{media} = \frac{\sum_{i=1}^{n} x_i}{n}$$